from collections import defaultdict


def distribute_cases_by_order(testcases):
    """初始化待执行用例，将用例按序编排"""
    result_dict = defaultdict(list)
    for testcase in testcases:
        key, *values = testcase.split("_")
        result_dict[key].extend(values)
    return [(key, values) for key, values in result_dict.items()]


def distribute_cases_to_node(nodes, test_cases):
    """
    使用轮询策略将测试用例分配给节点

    :param nodes: 节点列表，包含地址、用户名、密码等信息
    :param test_cases: 待执行的自动化测试用例列表
    :return: 一个字典，其中键是包含节点信息的元组，值是一个分配给该节点的测试用例列表
    """
    # 初始化一个字典来存储结果
    distribution = {
        (nodes[0].address, host.username, host.password): [] for host in nodes
    }

    # 轮询索引
    node_index = 0

    for test_case in test_cases:
        # 获取节点信息
        node_info = (
            nodes[node_index].address,
            nodes[node_index].username,
            nodes[node_index].password,
        )
        # 将当前测试用例分配到当前索引的节点
        distribution[node_info].append(test_case)
        # 更新索引，如果到达最后一个节点，则重新开始
        node_index = (node_index + 1) % len(nodes)
    return distribution
